/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package satk.beans.view;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.DataModel;
import javax.faces.model.SelectItem;
import satk.beans.session.EventoActivo;
import satk.database.ManagerInscripcion;
import satk.database.ManagerPersona;
import satk.objetos.Categoria;
import satk.objetos.Cinta;
import satk.objetos.Inscripcion;

/**
 *
 * @author Base
 */
@ManagedBean
@ViewScoped
public class AdminInscripcionesBean
        extends satk.beans.ProcessDataBase<Inscripcion>
        implements java.io.Serializable{
    
    private DataModel<Inscripcion> dataModel = null;
    private Inscripcion newInscripcion = null;
    private Integer identificadorEvento;

    public AdminInscripcionesBean() {
        super(new satk.database.ManagerInscripcion(EventoActivo.getSessionInstance().getIdentificador()).getAll());
        this.dataModel = new javax.faces.model.ListDataModel<Inscripcion>(super.getLista());
        newInscripcion = new Inscripcion();
        this.identificadorEvento = EventoActivo.getSessionInstance().getIdentificador();
    }
    
    public List getCategorias(){
        List<Categoria> lista = new ManagerInscripcion(identificadorEvento).getCategoriasEvento();
        List<SelectItem> array = new ArrayList();
        for (Categoria categoria : lista) {
            array.add(new SelectItem(categoria.getIdentificador(), categoria.getNombre()));
        }
        return new ArrayList<SelectItem>(array);
    }
    
    public List getCintas(){
        List<Cinta> lista = new ManagerInscripcion(identificadorEvento).getCintasEvento(newInscripcion.getCategoria().getIdentificador());
        List<SelectItem> array = new ArrayList();
        for (Cinta cinta : lista) {
            array.add(new SelectItem(cinta.getIdentificador(), cinta.getColor()));
        }
        return new ArrayList<SelectItem>(array);
    }

    public DataModel<Inscripcion> getDataModel() {
        return dataModel;
    }

    public Inscripcion getNewInscripcion() {
        return newInscripcion;
    }
    
    public String findPersona(){
        satk.objetos.Persona per = new ManagerPersona().getByBoleta(this.newInscripcion.getPersona().getBoleta());
        this.newInscripcion.setPersona(per);
        return null;
    }
    
    @Override
    public String add(Inscripcion e) {
        resultError = false;
        try {
            resultCode = new satk.database.ManagerInscripcion(identificadorEvento).add(e);
            resultMessage = String.format("[%s] inscrito exitosamente", e.getPersona().getFullName());
            super.getLista().add(0, e);
            e = new Inscripcion();
        } catch (java.sql.SQLIntegrityConstraintViolationException ex){
            Logger.getLogger(AdminInscripcionesBean.class.getName()).log(Level.SEVERE, "Violacion de integridad", ex);
            resultCode = ex.getErrorCode();
            resultMessage = ex.getMessage();
            resultError = true;
        }
        catch (java.sql.SQLException ex) {
            Logger.getLogger(AdminInscripcionesBean.class.getName()).log(Level.SEVERE, "Error en la Inscripción", ex);
            resultCode = ex.getErrorCode();
            resultMessage = ex.getSQLState() + " " + ex.getMessage();
            resultError = true;
        }
        result = true;
        return null;
    }

    @Override
    public String edit(Inscripcion o, Inscripcion n) {
        resultError = false;
        try{
            resultCode = new satk.database.ManagerInscripcion(identificadorEvento).update(o, n);
            resultMessage = n.getIdentificador() + "Inscripcion actualizada";
        } catch (java.sql.SQLIntegrityConstraintViolationException ex) {
            Logger.getLogger(AdminInscripcionesBean.class.getName()).log(Level.SEVERE, "La persona ya esta inscrita", ex);
            resultCode = ex.getErrorCode();
            resultMessage = "La persona ya esta inscrita";
            resultError = true;
            n = (Inscripcion) o.clon();
        }
        catch(java.sql.SQLException ex){
            Logger.getLogger(AdminInscripcionesBean.class.getName()).log(Level.SEVERE, "Error al realizar la inscripción", ex);
            resultCode = ex.getErrorCode();
            resultMessage = ex.getSQLState() + " " + ex.getMessage();
            resultError = true;
            n = (Inscripcion) o.clon();
        }
        result = true;
        return null;
    }

    @Override
    public String del(Inscripcion e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String actionSaveEdit(Inscripcion e) {
        int id = e.getIdentificador();
        if(isBeingEdited(id)){
            edit(getCtrlEdit().get(id), e);
            actionCancelEdit(id);
        }
        return null;
    }

    @Override
    public String actionSaveEditAll() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String actionSaveRemove(Inscripcion e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String actionSaveRemoveAll() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    
}
